#include <stdio.h>
#include <sys/types.h>
#include <pthread.h>
#include <unistd.h>
#include <string.h>

int num =0;

void *task1(void *arg){
    for(int i=0;i<10;i++){
        num++;
        printf("Num is %d\n", num);
        sleep(1);
    }
    return NULL;
}

int main(int argc, char const *argv[])
{
    pthread_t tid = 0; 
    pthread_create(&tid, NULL, task1, NULL);
    if(tid <= 0){
        perror("pthread create");
        return -1;
    }

    // 分离线程
    int ret = pthread_detach(tid);
    if(ret != 0){
        perror("detach");
        return -1;
    }
    sleep(3);
    pthread_cancel(tid); // 效果应该让子线程停止工作

    // 重要：分离的线程不能再join
    ret = pthread_join(tid, NULL);   // 返回错误号22(EINVAL)
    printf("---join ret is %d(%s)--\n", ret, strerror(ret)); 
    sleep(5); // 主线程还需要等待子线程完成任务
    printf("---over---\n"); // 线程分离之后，能否独立运行？不能的
    return 0;
}
